﻿        using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using ProjetoBe.cs;
using ProjetoUtil;

namespace ProjetoDalc.cs
{
    public class FuncionarioDalc
    {
        public bool VerificaLoginValido(string login)
        {
            using(SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();

                command.Connection = conexao;
                command.CommandText = "SELECT USUARIO FROM CADASTRO_LOGIN WHERE USUARIO = @NomeUsario;";
                command.Parameters.AddWithValue("@NomeUsario", login);

                conexao.Open();
                object usuario = command.ExecuteScalar();
                conexao.Close();

                if (usuario == null)
                    return true;
                else
                    return false;
            }
        }

        public string VerificaDuplicidadeLogin(TelefoneFuncionarioBe objeto)
        {
            using (SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();

                command.Connection = conexao;
                command.CommandText = "SELECT USUARIO FROM FUNCIONARIO F INNER JOIN CADASTRO_LOGIN C ON F.CADASTRO_LOGIN_ID = C.CADASTRO_LOGIN_ID WHERE F.FUNCIONARIO_ID = @id;";
                command.Parameters.AddWithValue("@id", objeto.funcionario.id);

                conexao.Open();
                string usuario = (string)command.ExecuteScalar();
                conexao.Close();

                return usuario;
            }
        }

        public void InserirLogin(Login objeto)
        {
            using(SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "INSERT INTO CADASTRO_LOGIN VALUES(@USUARIO, @SENHA, @TIPO); SELECT SCOPE_IDENTITY();";// RETORNA O ULTIMO ID INSERIDO NA TABELA
                command.Parameters.AddWithValue("USUARIO", objeto.usuario);
                command.Parameters.AddWithValue("SENHA", objeto.senha);
                command.Parameters.AddWithValue("TIPO", objeto.tipo);
                adapter.InsertCommand = command;

                conexao.Open();
                decimal id = (decimal)command.ExecuteScalar();
                objeto.id = Convert.ToInt32(id);
                conexao.Close();
            }
        }

        public void InserirTelefone(TelefoneFuncionarioBe objeto)
        {
            using(SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "INSERT INTO TELEFONE_FUNCIONARIO VALUES(@TELEFONE, @FUNCIONARIO_ID, @TELEFONE_TIPO);";
                command.Parameters.AddWithValue("@FUNCIONARIO_ID", objeto.funcionario.id);
                command.Parameters.AddWithValue("@TELEFONE_TIPO", objeto.tipo);

                if (objeto.telefone == "(  )     -")
                    command.Parameters.AddWithValue("@TELEFONE", DBNull.Value);
                else
                    command.Parameters.AddWithValue("@TELEFONE", objeto.telefone); 

                adapter.InsertCommand = command;

                conexao.Open();
                command.ExecuteNonQuery();
                conexao.Close();
            }
        }

        public FuncionarioBe InserirFuncionario(FuncionarioBe objeto)
        {
            using(SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                Util metodosAux = new Util();

                command.Connection = conexao;
                command.CommandText = "INSERT INTO FUNCIONARIO VALUES(@FUNCIONARIO_NOME, @FUNCIONARIO_NASCIMENTO,@FUNCIONARIO_CPF, @FUNCIONARIO_ADMISSAO, @FUNCIONARIO_SAIDA, @FUNCIONARIO_CARGO, @CADASTRO_LOGIN_ID); SELECT SCOPE_IDENTITY();";
                command.Parameters.AddWithValue("FUNCIONARIO_NOME", objeto.nome);
                command.Parameters.AddWithValue("FUNCIONARIO_NASCIMENTO", objeto.nascimento);
                command.Parameters.AddWithValue("FUNCIONARIO_CPF", objeto.cpf);
                command.Parameters.AddWithValue("FUNCIONARIO_ADMISSAO", objeto.admissao);

                if (objeto.saida.HasValue)
                    command.Parameters.AddWithValue("FUNCIONARIO_SAIDA", objeto.saida);
                else
                    command.Parameters.AddWithValue("FUNCIONARIO_SAIDA", DBNull.Value);

                command.Parameters.AddWithValue("FUNCIONARIO_CARGO", objeto.cargo);
                command.Parameters.AddWithValue("CADASTRO_LOGIN_ID", objeto.login.id);

                adapter.InsertCommand = command;

                conexao.Open();
                decimal id = (decimal)command.ExecuteScalar();
                objeto.id = Convert.ToInt32(id);
                conexao.Close();
            }
            return objeto;
        }

        public TelefoneFuncionarioBe BuscarDadosFuncionarioSelecionado(string nome)
        {

            SqlDataReader reader;
            TelefoneFuncionarioBe novofuncionariotelefone = new TelefoneFuncionarioBe();

            using (SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();

                command.Connection = conexao;
                command.CommandText = "SELECT F.FUNCIONARIO_ID,F.FUNCIONARIO_NOME,F.FUNCIONARIO_NASCIMENTO,F.FUNCIONARIO_CPF,F.FUNCIONARIO_ADMISSAO,F.FUNCIONARIO_SAIDA,F.FUNCIONARIO_CARGO,T.TELEFONE,C.USUARIO,C.SENHA,C.TIPO FROM FUNCIONARIO F INNER JOIN CADASTRO_LOGIN C ON F.CADASTRO_LOGIN_ID = C.CADASTRO_LOGIN_ID INNER JOIN TELEFONE_FUNCIONARIO T ON F.FUNCIONARIO_ID = T.FUNCIONARIO_ID WHERE F.FUNCIONARIO_NOME like '%' + @nome + '%'";
                command.Parameters.AddWithValue("@nome", nome);
                conexao.Open();
                reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        novofuncionariotelefone.funcionario.id = Convert.ToInt32(reader["FUNCIONARIO_ID"]);
                        novofuncionariotelefone.funcionario.nome = reader["FUNCIONARIO_NOME"].ToString();
                        novofuncionariotelefone.funcionario.nascimento = Convert.ToDateTime(reader["FUNCIONARIO_NASCIMENTO"]);
                        novofuncionariotelefone.funcionario.cpf = reader["FUNCIONARIO_CPF"].ToString();
                        novofuncionariotelefone.funcionario.admissao = Convert.ToDateTime(reader["FUNCIONARIO_ADMISSAO"]);

                        if (reader["FUNCIONARIO_SAIDA"] != DBNull.Value)
                            novofuncionariotelefone.funcionario.saida = Convert.ToDateTime(reader["FUNCIONARIO_SAIDA"]);
                        novofuncionariotelefone.funcionario.cargo = reader["FUNCIONARIO_CARGO"].ToString();

                        novofuncionariotelefone.funcionario.login.usuario = reader["USUARIO"].ToString();
                        novofuncionariotelefone.funcionario.login.senha = reader["SENHA"].ToString();
                        novofuncionariotelefone.funcionario.login.tipo = reader["TIPO"].ToString();

                        novofuncionariotelefone.telefone = reader["TELEFONE"].ToString();
                    }
                }

                conexao.Close();
                return novofuncionariotelefone;
            }
        }

        public string BuscarTelefone (string tipo, string nome)
        {

            using (SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "SELECT T.TELEFONE FROM TELEFONE_FUNCIONARIO T INNER JOIN FUNCIONARIO F ON F.FUNCIONARIO_ID = T.FUNCIONARIO_ID WHERE F.FUNCIONARIO_NOME like '%' + @nome + '%' AND T.TELEFONE_TIPO = @tipo "; // fazer select
                command.Parameters.AddWithValue("@nome", nome);
                command.Parameters.AddWithValue("@tipo", tipo);
               
                conexao.Open();

                object temp = command.ExecuteScalar();
                string telefone;
                telefone = Convert.ToString(temp);
                conexao.Close();

                return telefone;

            }
        }

        public List<string> BuscarNomeFuncionario(string nome)
        {
            SqlDataReader reader;
            List<string> nomefuncionario = new List<string>();
            using (SqlConnection conexao = Connection.CriarConexao())
            {
                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "SELECT FUNCIONARIO_NOME FROM FUNCIONARIO WHERE FUNCIONARIO_NOME like '%' + @nome + '%'";
                command.Parameters.AddWithValue("@nome", nome);
                conexao.Open();

                reader = command.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        nomefuncionario.Add((reader.GetString(0)));
                    }
                }
                conexao.Close();
                return nomefuncionario;
            }
        }

        public void AlterarDadosFuncionario(FuncionarioBe novofuncionario)
        {
            using (SqlConnection conexao = Connection.CriarConexao())
            {

                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "UPDATE FUNCIONARIO SET FUNCIONARIO_NOME = @nome, FUNCIONARIO_NASCIMENTO = @nascimento, FUNCIONARIO_CPF = @cpf, FUNCIONARIO_ADMISSAO = @admissao, FUNCIONARIO_SAIDA = @saida, FUNCIONARIO_CARGO = @cargo WHERE FUNCIONARIO_ID = @id";
                command.Parameters.AddWithValue("@id", novofuncionario.id);
                command.Parameters.AddWithValue("@nome", novofuncionario.nome);
                command.Parameters.AddWithValue("@nascimento", novofuncionario.nascimento);
                command.Parameters.AddWithValue("@cpf", novofuncionario.cpf);
                command.Parameters.AddWithValue("@admissao", novofuncionario.admissao);
                command.Parameters.AddWithValue("@cargo", novofuncionario.cargo);

                if (novofuncionario.saida.HasValue)
                    command.Parameters.AddWithValue("@saida", novofuncionario.saida);
                else
                    command.Parameters.AddWithValue("@saida", DBNull.Value);   

                adapter.InsertCommand = command;
                conexao.Open();
                command.ExecuteNonQuery();
                conexao.Close();

            }
        }

        public void AlterarDadosTelefone(TelefoneFuncionarioBe novofuncionariotelefone) // Adicionei a coluna TIPO / NCHAR(10) na tabela Telefone_funcionario
        {
            using (SqlConnection conexao = Connection.CriarConexao())
            {

                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "UPDATE TELEFONE_FUNCIONARIO SET TELEFONE = @telefone WHERE FUNCIONARIO_ID = @id AND TELEFONE_TIPO = @tipo";

                if (novofuncionariotelefone.telefone == "(  )     -")
                    command.Parameters.AddWithValue("@telefone", DBNull.Value);
                else
                    command.Parameters.AddWithValue("@telefone", novofuncionariotelefone.telefone); 
                
                command.Parameters.AddWithValue("@tipo", novofuncionariotelefone.tipo);
                command.Parameters.AddWithValue("@id", novofuncionariotelefone.funcionario.id);

                adapter.InsertCommand = command;
                conexao.Open();
                command.ExecuteNonQuery();
                conexao.Close();

            }
        }

        public void AlterarDadosLogin(TelefoneFuncionarioBe novofuncionariotelefone)
        {
            using (SqlConnection conexao = Connection.CriarConexao())
            {

                SqlCommand command = new SqlCommand();
                SqlDataAdapter adapter = new SqlDataAdapter();
                command.Connection = conexao;

                command.CommandText = "SELECT CADASTRO_LOGIN_ID FROM FUNCIONARIO WHERE FUNCIONARIO_ID = @id_fun;";
                command.Parameters.AddWithValue("@id_fun", novofuncionariotelefone.funcionario.id);

                conexao.Open();
                int id = (int)command.ExecuteScalar();
                conexao.Close();

                command.CommandText = "UPDATE CADASTRO_LOGIN SET USUARIO = @usuario, SENHA = @senha, TIPO = @tipo WHERE CADASTRO_LOGIN_ID = @id";
                command.Parameters.AddWithValue("@usuario", novofuncionariotelefone.funcionario.login.usuario);
                command.Parameters.AddWithValue("@senha", novofuncionariotelefone.funcionario.login.senha);
                command.Parameters.AddWithValue("@tipo", novofuncionariotelefone.funcionario.login.tipo);
                command.Parameters.AddWithValue("@id", id);

                adapter.InsertCommand = command;
                conexao.Open();
                command.ExecuteNonQuery();
                conexao.Close();

            }
        } 
    }
}
